import { TableColumnCtx } from 'element-plus';
import type { Component } from 'vue';

export type TableColumnType = 'selection' | 'index' | 'expand' | 'action' | 'default';
interface DynamicComponentProps {
  is: string | Component;
  props: Recordable;
}
export type CellFormat =
  | string
  | Recordable
  | ((text: string, record: Recordable, index: number) => string | number)
  | Map<string | number, any>;

/** 继承element-plus的类型定义，并拓展新的类型定义 */
export interface TableColumn<T> extends TableColumnCtx<T> {
  children: TableColumn<T>[];
  /** 类型 */
  type: TableColumnType;
  /** 格式化 */
  format: CellFormat;
  /** 自定义组件 */
  component?: string | DynamicComponentProps;
  /** 是否可以隐藏 */
  clocked: boolean;
}

/** 新的BasicColumn定义 */
export type BasicColumn<T> = Partial<TableColumn<T>>;
